function main() {
	Ext.QuickTips.init();
	config = new ConfigClass();
	server = new rpc.ServiceProxy(config.address, {asynchronous:false, 
			protocol: "XML-RPC"});
	
	var rowEditing = Ext.create('Ext.grid.plugin.RowEditing', {
		clicksToMoveEditor: 1,
		autoCancel: true,
	});
	
	
	server2 = new rpc.ServiceProxy(config.address, {protocol: "XML-RPC"});
	Ext.create('Ext.container.Viewport', {
		items: [{
			region: 'center',
			xtype: 'panel',
			tbar: [{
				xtype:	'button',
				text:	'Добавить...',
				iconCls: 'icon-add',
				handler: function () {
					Ext.create('Ext.window.Window', {
						title: 'Добавление данных в базу',
						height: 400,
						width: 550,
						modal: true,
						//closable: false,
						id: 'add_window',
						autoDestroy: true,
						layout: {
							type: 'table',
							columns: 2
						},
						defaults: {
							labelWidth: 90,
							width:253,
							queryMode: 'remote',
							minChars: 1,
							typeAhead: true
						},
						margins:'0 0 0 3',
						bodyStyle  : 'padding: 10px; background-color: #DFE8F6',
						items: [{
							xtype: 'label',
						},{
							xtype: 'datefield',
							fieldLabel: 'Дата отгрузки',
							format: 'd.m.Y',
							id: 'adate',
							listeners: {
								keydown: {
									element: 'el',
									fn: adate_keydown,
								}
							}
						}, {
							xtype: 'combo',
							fieldLabel: 'Клиент',
							displayField: 'name',
							store: new Ext.progs.stores.Client(),
							id: 'aclient',
							listeners: {
								keydown: {
									element: 'el',
									fn: aclient_keydown,
								}
							}
						},{
							xtype: 'combo',
							fieldLabel: 'Адрес',
							displayField: 'address',
							store: new Ext.progs.stores.Address(),
							id: 'aaddress',
							listeners: {
								keydown: {
									element: 'el',
									fn: aaddress_keydown,
								}
							}
						},{
							xtype: 'combo',
							fieldLabel: 'Модель',
							displayField: 'name',
							store: new Ext.progs.stores.Model(),
							id: 'amodel',
							listeners: {
								keydown: {
									element: 'el',
									fn: amodel_keydown,
								}
							}
						},{
							xtype: 'combo',
							fieldLabel: 'Дизайн',
							displayField: 'name',
							store: new Ext.progs.stores.Disign(),
							id: 'adisign',
							listeners: {
								keydown: {
									element: 'el',
									fn: adisign_keydown,
								}
							}
						},{
							xtype: 'combo',
							fieldLabel: 'Гарантия',
							displayField: 'periud',
							store: new Ext.progs.stores.Warranty(),
							id: 'awarranty',
							listeners: {
								keydown: {
									element: 'el',
									fn: awarranty_keydown,
								}
							}
						},{
							xtype: 'field',
							fieldLabel: 'ТТН',
							id: 'attn',
							listeners: {
								keydown: {
									element: 'el',
									fn: attn_keydown,
								}
							}
						},{
							xtype: 'field',
							fieldLabel: 'Счет',
							id: 'aschet',
							listeners: {
								keydown: {
									element: 'el',
									fn: aschet_keydown,
								}
							}
						},{
							xtype: 'field',
							fieldLabel: 'Код',
							id: 'acode',
							listeners: {
								keydown: {
									element: 'el',
									fn: acode_keydown,
								}
							}
						},{
							xtype: 'textarea',
							colspan: 2,
							width: 515,
							hideLabel: true,
							id: 'acomment',
						},{
							xtype: 'grid',
							width: 515,
							height: 100,
							id: 'snin-1000',
							colspan: 2,
							autoScroll: true,
							store: new Ext.progs.stores.SnIn(),
							/*viewConfig: {
								getRowClass: function(record, index) {
									var c = record.get('c');
									if (c) {
										return 'color-f';
									}
								}
							},*/
							columns:	[
								Ext.create('Ext.grid.RowNumberer'),{
									text: 'Серийный номер',
									dataIndex: 'serial_number',
									flex: 1,
									renderer: cell_color,
									field: {
										allowBlank: false
									},
								},{
									text: 'Инвентарный номер',
									dataIndex: 'inventory_number',
									flex: 1,
									renderer: cell_color,
									field: {
										allowBlank: false
									},
								},
							],
							plugins: [
								Ext.create('Ext.grid.plugin.RowEditing', {
									clicksToEdit: 2,
								}),
							],
						},{
							xtype: 'field',
							fieldLabel: 'Сер. номер',
							id: 'sn-1000',
							listeners: {
								keydown: {
									element: 'el',
									fn: sn_keydown,
								}
							}
						},{
							xtype: 'combo',
							fieldLabel: 'Инв. номер',
							id: 'in-1000',
							autoSelect: false,
							queryDelay: 3600000,
							displayField: 'z',
							store: new Ext.data.Store({
								model: Ext.progs.models.MIn,
								proxy: {
									type: 'memory',
								},
								data: [{id: 2, 'z': 'Нет номера'}],
							}),
							listeners: {
								keydown: {
									element: 'el',
									fn: in_keydown,
								}
							}
						}],
						buttons:['->', {
							xtype: 'button',
							text: 'Добавить',
							handler: add_main_n,
						},{
							xtype: 'button',
							text: 'Добавить и продолжить',
							handler: add_main_c,
						}]
					}).show();
				}
			},{
				xtype: 'button',
				text: 'Удалить выделенное...',
				iconCls: 'icon-remove',
				handler: function () {
					Ext.MessageBox.confirm('Подтвердите!', 'Точно удалить выделенное?', function(btn, text){
						if (btn == 'yes') {
							sm = Ext.getCmp('main_grid').getSelectionModel();
							if (sm.selected.items.length == 0){
								Ext.Msg.alert('Хм!!!', 'Нет выбраных строк!');
							} else {
								var r = new Array(sm.selected.items.length);
								for (var si in sm.selected.items){
									r[si] = sm.selected.items[si].data.id;
								};
								server2.delete_items({
									params: [r],
									onSuccess: function() {
										main_store.load();
									},
									onException: function() {
										Ext.Msg.alert('Ошибка!', 'Ошибка сервера!');
									}
								});
							}
						}
					});
				},
			},{
				xtype:	'button',
				text:	'Поиск...',
				iconCls: 'icon-find',
				handler: function () {
					Ext.create('Ext.progs.window.Search').show();
				}
			},{
				xtype: 'button',
				text: 'Сбросить поиск',
				iconCls: 'icon-clear',
				handler: function () {
					main_store.proxy.url = "/frigoglass/src/server/get_main.py?qid=0";
					qid = 0;
					main_store.load();
				}
			},{
				xtype: 'button',
				text: 'Экспорт в Excel',
				handler: function () {
					window.location.href = server.xls(qid);
				}
			},{
				xtype:	'tbfill',
			},{
				xtype:	'button',
				text:	'Помощь',
				iconCls: 'icon-help',
				menu:	[{
					text:	'Сообщить об ошибке...',
					iconCls:'icon-bug',
				},{
					text:	'Написать разработчикам...',
					iconCls:'icon-email',
				},'-',{
					text:	'О программе...',
					iconCls:'icon-about',
				}],
			}],
			items: [{
				xtype: 'grid',
				height: '100%',
				store: main_store,
				id: "main_grid",
				scroll: 'both',
				plugins: [{
					ptype: 'rowexpander',
					rowBodyTpl : [
						'<p>{comment}</p>'
					]
				},rowEditing],
				multiSelect: true,
				columns: [
					Ext.create('Ext.grid.RowNumberer', {
						width: 60,
						
					}),
					{
						text: 'Дата', 
						dataIndex: 'date', 
						renderer: Ext.util.Format.dateRenderer('d.m.Y'),
						field: {
							xtype: 'datefield',
							allowBlank: false,
							format: 'd.m.Y',
						},
					},{
						text: 'Серийный номер', 
						dataIndex: 'sn',
						editor: {
							allowBlank: false,
						}
					},{
						text: 'Инвентарный номер', 
						dataIndex: 'in',
						editor: {
							allowBlank: true,
						},
					},{
						text: 'Название клиента',
						dataIndex: 'client',
						field: {
							xtype: 'combo',
							displayField: 'name',
							store: new Ext.progs.stores.Client(),
						},
					},{
						text: 'Адрес доставки',
						dataIndex: 'address',
						field: {
							xtype: 'combo',
							displayField: 'address',
							store: new Ext.progs.stores.Address(),
						},
					},{
						text: 'Модель',
						dataIndex: 'model',
						field: {
							xtype: 'combo',
							displayField: 'name',
							store: new Ext.progs.stores.Model(),
						},
					},{
						text: 'Дизайн',
						dataIndex: 'disign',
						field: {
							xtype: 'combo',
							displayField: 'name',
							store: new Ext.progs.stores.Disign(),
						},
					},{
						text: 'Гарантия',
						dataIndex: 'warranty',
						field: {
							xtype: 'combo',
							displayField: 'periud',
							store: new Ext.progs.stores.Warranty(),
						},
					},{
						text: '№ ТТН',
						dataIndex: 'ttn',
						editor: {
							allowBlank: false,
						},
					},{
						text: '№ с/фактуры',
						dataIndex: 'schet',
						editor: {
							allowBlank: false,
						},
					},{
						text: 'Склад.код',
						dataIndex: 'code',
						flex: 1,
						editor: {
							allowBlank: false,
						},
					},
				]
			}],
			width: '100%',
			height: '100%',
			bbar: [ new Ext.PagingToolbar({
				pageSize: 25,
				store: main_store,
				displayInfo: true,
				displayMsg: 'Показано записей {0} - {1} из {2}',
				emptyMsg: "Нет данных...",
				width: '100%',
			})],
		}],
		renderTo: Ext.getBody(),
	});
	main_store.on('write', function () {main_store.load()});
};

Ext.onReady(main);